package com.itydl.a05.view;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.util.AttributeSet;
import android.view.View;

import com.itydl.a05.R;

/**
 * @author ydl
 * @version 仿美团第一阶段自定义View
 */

public class RefreshFirstStepView extends View {
    private static final String TAG = "RefreshFirstStepView";

    private float mProgress;//模拟进度
    private Bitmap mInitialBitmap;//第一个状态的图片
    private Bitmap mEndBitmap;//第二三状态的图片
    private int mWidth;//第二三状态的宽度
    private int mHeight;//第二三状态的高度
    private int mMeasuredWidth;//当前控件的宽度
    private int mMeasuredHeight;//当前控件的高度
    private Bitmap scaledBitmap;//进行缩放后的图片

    public RefreshFirstStepView(Context context) {
        this(context,null);
    }

    public RefreshFirstStepView(Context context, AttributeSet attrs) {
        super(context, attrs);
        init();
    }

    /**
     * 初始化
     */
    private void init() {
        //这个就是那个椭圆形图片
        mInitialBitmap = Bitmap.createBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.pull_image));
        //这个是第二个状态娃娃的图片，之所以要这张图片，是因为第二个状态和第三个状态的图片的大小是一致的，而第一阶段
        //椭圆形图片的大小与第二阶段和第三阶段不一致，因此我们需要根据这张图片来决定第一张图片的宽高，来保证
        //第一阶段和第二、三阶段的View的宽高一致。
        mEndBitmap = Bitmap.createBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.pull_end_image_frame_05));
        mWidth = mEndBitmap.getWidth();
        mHeight = mEndBitmap.getHeight();
        //        Log.e(TAG,width+"--===---"+mHeight);
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        setMeasuredDimension(measureWidth(widthMeasureSpec),measureWidth(widthMeasureSpec)*mHeight/mWidth);
        mMeasuredWidth = getMeasuredWidth();
        mMeasuredHeight = getMeasuredHeight();
        //        Log.e(TAG,mMeasuredWidth+"-----"+mMeasuredHeight);
    }

    /**
     * 获取控件的宽度，如果布局文件中为match_parent或者写死则大小就为这个值，如果是wrap_content,则测量第二张图片的宽度值设置给当前的控件宽度
     * @return
     * @param widthMeasureSpec
     */
    public int measureWidth(int widthMeasureSpec) {
        int result = 0;
        int size = MeasureSpec.getSize(widthMeasureSpec);
        int mode = MeasureSpec.getMode(widthMeasureSpec);
        if(mode == MeasureSpec.EXACTLY){//精确地
            result = size;
        }else{
            result = mWidth;//
            if(mode == MeasureSpec.AT_MOST){//如果是wrap_content，取最小值
                result = Math.min(result,size);
            }
        }
        return result;
    }

    @Override
    protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
        super.onLayout(changed, left, top, right, bottom);
        //根据第二阶段娃娃宽高  给椭圆形图片进行等比例的缩放
        /**
         *  ①src           对资源src进行缩放
         ②dstWidth  缩放成宽dstWidth
         ③dstHeight 缩放成高dstHeight
         ④filter        过滤
         如果是放大图片，filter决定是否平滑，如果是缩小图片，filter无影响.一般设置为true即可
         */
        scaledBitmap = Bitmap.createScaledBitmap(mInitialBitmap, mMeasuredWidth,mMeasuredWidth*mInitialBitmap.getHeight()/mInitialBitmap.getWidth(), true);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
//                Log.e(TAG,mProgress+"");
        //对图片的绘制
        //这个方法是对画布进行缩放，从而达到椭圆形图片的缩放。第一个参数为宽度缩放比例，第二个参数为高度缩放比例，参数3和4都是坐标,表示沿着中心点缩放
        canvas.scale(mProgress, mProgress, mMeasuredWidth/2, mMeasuredHeight/2);
        //将等比例缩放后的椭圆形画在画布上面，第四个参数为null，表示图片不使用Paint
        canvas.drawBitmap(scaledBitmap,0,mMeasuredHeight/4,null);
    }

    /**
     * 设置缩放比例，从0到1  0为最小 1为最大
     * @param progress
     */
    public void setProgress(float progress) {
        mProgress = progress;
    }

}
